// interface的使用
interface Gril { //定义Gril的类型
    name: string;
    age: number;
    bust: number;
    hobby?: string;
    [propname:string]:any;
    say():string
}
// [propname:string]表示的是这个属性的类型是字符串，any 表示这个属性的值为任意的数据类型
//  hobby?: string 表示的是 这个这个值 可以有也可以没有
// say():string 表示的是这是个say方法，返回值是一个字符串

/* extends
顾名思义，继承，一个新的接口或者类，从父类或者接口继承所有的属性和方法，不可以重写属性，但可以重写方法 */
interface DaJieJie2 extends Gril{//此处表示DaJieJie2继承了Gril，并且多添加了一个teach的方法
    teach():string
}
/* implements
顾名思义，实现，一个新的类，从父类或者接口实现所有的属性和方法，同时可以重写属性和方法，包含一些新的功能 */
class DaJieJie1 implements Gril{ // 定义一个类，通过接口interface进行限制
    name='刘英'
    age=18
    bust=78
    say(){
        return '欢迎光临红浪漫洗浴'
    }
}
const gril1 = {
    name: '李焕英',
    age: 15,
    bust: 90,
    sex:'女',
    say(){
        return '欢迎光临'
    },
    teach(){
        return '你好'
    }
}
const gril2 = {
    name: '李英',
    age: 20,
    bust: 50,
    sex:'女',
    say(){
        return '欢迎光临红浪漫西域'
    },
}

const chosted = (gril: DaJieJie2) => {  //(gril:DaJieJie2)表示gril要满足DaJieJie2的数据类型
    gril.age < 20 && gril.bust > 80 && console.log(gril.name + '被选中')
    gril.age > 20 || gril.bust < 80 && console.log(gril.name + '没有被选中')
}
chosted(gril1) //调用函数
const chosedGril = (gril: Gril) => {
    console.log(gril.name + '年龄是' + gril.age);
    console.log(gril.name + '爱好是' + gril.hobby);
    gril.sex&&console.log(gril.name+'的性别是'+gril.sex)
}
chosedGril(gril1) //调用函数
chosedGril(gril2) //调用函数